package com.yys.excel.yysexcel.controller;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.db.Entity;
import cn.hutool.db.Page;
import cn.hutool.db.PageResult;
import com.yys.excel.yysexcel.common.constant.ExcelStants;
import com.yys.excel.yysexcel.common.result.R;
import com.yys.excel.yysexcel.entity.ImportExportTemplate;
import com.yys.excel.yysexcel.entity.JdbcConfig;
import com.yys.excel.yysexcel.mapper.ImportExportMapper;
import com.yys.excel.yysexcel.service.ImportExportService;
import com.yys.excel.yysexcel.utils.RandomStrg;
import com.yys.excel.yysexcel.utils.dbUtil.DbUtil;
import com.yys.excel.yysexcel.utils.dbUtil.JdbcDbUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;

/**
 * 注释
 *
 * @author lys
 * @date 2022/12/6
 */
@RestController
@RequestMapping("/template")
@RequiredArgsConstructor
@CrossOrigin
public class TemplateController {
    private final ImportExportService importExportService;
    /**
     * 通过id获取模板
     *
     * @param id id
     * @return {@link R}
     */
    @GetMapping("/getTemplateById")
    public R getTemplateById(String id) {
        ImportExportTemplate template = ImportExportMapper.getTemplateById(id);
        return R.ok(template);
    }

    /**
     * 模板分页
     *
     * @param where 条件筛选
     * @return {@link R}
     */
    @GetMapping("/getTemplatePage")
    public R getTemplatePage(@RequestBody Entity where) {
        where.setTableName(ExcelStants.IMPORT_EXPORT_TEMPLATE_TABLE).set("isdelete", 0);
        Page page = DbUtil.getPage(where);
        PageResult<Entity> res = DbUtil.page(where, page);
        return R.ok(res);
    }

    /**
     * 新增模板
     *
     * @param template 模板
     * @return {@link R}
     */
    @PostMapping("/addTemplate")
    public R addTemplate(@RequestBody ImportExportTemplate template) {
        return R.ok(ImportExportMapper.insertTemplate(template));
    }

    /**
     * 新增数据库配置
     *
     * @param jdbcConfig 数据库配置
     * @return {@link R}
     */
    @PostMapping("/jdbcConfig")
    public R jdbcConfig(@RequestBody JdbcConfig jdbcConfig) {
        try {
            String id = RandomStrg.getGUID32();
            jdbcConfig.setId(id);
            ImportExportMapper.insertJdbc(jdbcConfig);
            return R.ok(id);
        } catch (Exception x) {
            return R.fail(x.getMessage());
        }
    }

    /**
     * 测试连接
     *
     * @return {@link R}
     */
    @GetMapping("/testConnectById")
    public R testConnectById(String id) {
        try {
            JdbcConfig jdbcConfig = ImportExportMapper.getJdbcConfigById(id);
            JdbcDbUtil.testConnection(jdbcConfig);
            return R.ok("连接成功");
        } catch (Exception e) {
            return R.fail("连接失败：" + e.getMessage());
        }
    }

    /**
     * 测试连接
     *
     * @return {@link R}
     */
    @GetMapping("/testConnectByConfig")
    public R testConnectById(@RequestBody JdbcConfig jdbcConfig) {
        try {
            JdbcDbUtil.testConnection(jdbcConfig);
            return R.ok("连接成功");
        } catch (Exception e) {
            return R.fail("连接失败：" + e.getMessage());
        }
    }

    /**
     * 下载模板oss的文件
     *
     * @param id       id
     * @param fileName 设置下载后的文件名称
     * @param response 响应
     * @return {@link R}
     */
    @PostMapping("/downlodaTemplateOssFileById")
    public R downlodaTemplateOssFileById(Long id,String fileName, HttpServletResponse response) {
        return importExportService.downlodaTemplateOssFileById(id,fileName,response);
    }
}
